home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / Misc / OfMiceAndMen / Source / Controleur.m < prev    next >
Encoding:
Text File  |  1995-06-12  |  6.2 KB  |  237 lines

  1. #import "Controleur.h"
  2. #import "InfoView.h"
  3.  
  4. @implementation Controleur
  5. //
  6. // Récupération des valeurs dans les différentes zones de texte,
  7. // puis appel de la méthode dessine dans l’objet graphe
  8. //
  9. - calculer:sender
  10. {
  11.     int i;
  12.     if (sender != self )        // Si le sender est le bouton OK
  13.         {    
  14.         couleur =[[zoneCouleur  target]  indexOfItem:[zoneCouleur title]];
  15.         pas = [zonePas floatValueAt:0];
  16.         nbrSouris = [zoneNbrSouris intValueAt:0];
  17.         profondeur = [zoneNbrIter intValueAt:0];
  18.         for (i=0;i<nbrSouris;i++)
  19.             {
  20.             x[i] = [[matrice cellAt:(i*2):0] floatValue];
  21.             y[i] = [[matrice cellAt:(i*2+1):0] floatValue];
  22.             }
  23.         }
  24.     else [fenetre makeKeyAndOrderFront:self];
  25.     [graphe dessine:nbrSouris:profondeur:couleur:pas:x:y];
  26.  
  27.     return self;
  28. }
  29.  
  30. - charger:sender
  31. //
  32. // Récupération des valeurs initiales ainsi que des paramètres dans un fichier
  33. // Attention : cette méthode est appellée soit par le menu "Open", soit par la méthode
  34. // "app:openFile:type" (cas où l’application est lancée par un double click sur un fichier
  35. // ".mice"
  36. //
  37. {
  38.     id panneau,cellule,leMenu,laMatrice;
  39.     char *ext[2] = {"mice"};
  40.     char titre[100];
  41.     int i;
  42.     FILE *fich;
  43.     float r1,v1,b1,r2,v2,b2,rf,vf,bf;
  44.  
  45.     if  (sender != self)        // si le sender est le menu "Open"
  46.         {
  47.         panneau = [OpenPanel new];
  48.         [panneau setTitle:"Open"];
  49.             // Ouverture de l’OpenPanel en modal
  50.         if ([panneau runModalForTypes:ext]) 
  51.             strcpy(nomdefichier , [panneau filename]);  // Récupération du fichier sélectionné
  52.         else return self;
  53.         }
  54.         
  55.     fich = fopen(nomdefichier,"r");            // Ouverture du fichier
  56.     for (i=0;i<6;i++)                        // Lecture de l’entête
  57.         fscanf(fich,"%s",titre);
  58.     fscanf(fich,"%f%d%d"
  59.             ,&pas
  60.             ,&nbrSouris
  61.             ,&profondeur);                // Lecture des paramètres
  62.     if ((strcmp(titre,"V2.0")==0)||(strcmp(titre,"V1.3")==0))
  63.         {
  64.         fscanf(fich,"%d",&couleur);
  65.         if (titre[1] == '2')
  66.             {
  67.             fscanf(fich,"%f%f%f%f%f%f%f%f%f\n"
  68.                     ,&r1,&v1,&b1,&r2,&v2,&b2,&rf,&vf,&bf);
  69.             [couleur1 setColor:NXConvertRGBToColor(r1,v1,b1)];
  70.             [couleur2 setColor:NXConvertRGBToColor(r2,v2,b2)];
  71.             [couleurFond setColor:NXConvertRGBToColor(rf,vf,bf)];
  72.             }
  73.         }
  74.     else couleur = 0;
  75.     leMenu = [zoneCouleur target];
  76.     laMatrice = [leMenu itemList];
  77.     [laMatrice selectCellWithTag:couleur];
  78.     [zoneCouleur setTitle:[[laMatrice selectedCell] title]];
  79.  
  80.     for (i=0;i<nbrSouris;i++)                // Lecture des positions initiales
  81.         fscanf(fich,"%f%f ",&x[i],&y[i]);
  82.     fclose(fich);                            // Fermeture du fichier
  83.     
  84.     // Modification du titre de la fenêtre
  85.     strcpy(titre,"Of Mice And Men : ");
  86.     strcat(titre,strrchr(nomdefichier,'/')+1);
  87.     [fenetre setTitle:titre];
  88.     
  89.     // Transfert des paramètres vers l’interface graphique 
  90.     [zonePas setFloatValue:pas at:0];        // Affectation au champ de texte
  91.         // Récupération de la valeur par le target (ici, un slider)
  92.     [[zonePas target] takeFloatValueFrom:zonePas];
  93.     
  94.     [zoneNbrSouris setIntValue:nbrSouris at:0];
  95.     [[zoneNbrSouris target] takeFloatValueFrom:zoneNbrSouris];
  96.     
  97.     [zoneNbrIter setIntValue:profondeur at:0];
  98.     [[zoneNbrIter target] takeFloatValueFrom:zoneNbrIter];
  99.     
  100.     for (i=0;i<nbrSouris;i++)
  101.         {
  102.         cellule = [matrice cellAt:(i*2):0];
  103.         [cellule setFloatValue:x[i]];
  104.         [[cellule target] takeFloatValueFrom:cellule];
  105.         cellule = [matrice cellAt:(i*2+1):0];
  106.         [cellule setFloatValue:y[i]];
  107.         [[cellule target] takeFloatValueFrom:cellule];
  108.         }
  109.  
  110.     [self calculer:self];
  111.  
  112.     [posPanel orderFront:self];    
  113.     [paramPanel orderFront:self];
  114.     [fenetre makeKeyAndOrderFront:self];    // Fait apparaître la fenêtre
  115.  
  116.     return self;
  117. }
  118. //
  119. // Ecriture dans un fichier ASCII des données initiales et paramètres de l’image affichée
  120. //
  121. - sauver:sender
  122. {
  123.     id panneau;
  124.     int i;
  125.     FILE *fich;
  126.     float r1,v1,b1,r2,v2,b2,rf,vf,bf;
  127.     
  128.     // Ouverture du SavePanel
  129.     panneau = [SavePanel new];
  130.     [panneau setRequiredFileType:"mice"];    // Spécifie l’extension des fichiers
  131.     [panneau setTitle:"Save"];
  132.     if ([panneau runModal])
  133.         {
  134.         fich = fopen([panneau filename],"w"); // Ouverture du fichier
  135.         fprintf(fich,"Of Mice And Men - V2.0\n"); // Version du logiciel
  136.         fprintf(fich,"%f %d %d %d\n"        //  Ecriture des paramètres
  137.                 ,pas
  138.                 , nbrSouris
  139.                 ,profondeur
  140.                 ,couleur);
  141.         NXConvertColorToRGB([couleur1 color],&r1,&v1,&b1);
  142.         NXConvertColorToRGB([couleur2 color],&r2,&v2,&b2);
  143.         NXConvertColorToRGB([couleurFond color],&rf,&vf,&bf);
  144.     
  145.         fprintf(fich,"%f %f %f %f %f %f %f %f %f\n",r1,v1,b1,r2,v2,b2,rf,vf,bf);
  146.         for (i=0;i<nbrSouris;i++)
  147.             fprintf(fich,"%f %f \n",x[i],y[i]);    // Ecriture des valeurs initiales
  148.         fclose(fich);                        // Fermeture du fichier
  149.         };
  150.     return self;
  151. }
  152.  
  153. - nouveau : sender
  154. {
  155. int i;
  156. id cellule;
  157.  
  158.     strcpy(nomdefichier,"Untitled.mice");
  159.     [fenetre setTitle:nomdefichier];
  160.     [zonePas setFloatValue:0.99 at:0];
  161.     [[zonePas target] takeFloatValueFrom:zonePas];
  162.     [zoneNbrSouris setIntValue:4 at:0];
  163.     [[zoneNbrSouris target] takeFloatValueFrom:zoneNbrSouris];
  164.     [zoneNbrIter setIntValue:100 at:0];
  165.     [[zoneNbrIter target] takeFloatValueFrom:zoneNbrIter];
  166.         
  167.     for (i=0;i<10;i++)
  168.         {
  169.         cellule = [matrice cellAt:(i*2):0];
  170.         [cellule setFloatValue:0.0];
  171.         [[cellule target] takeFloatValueFrom:cellule];
  172.         cellule = [matrice cellAt:(i*2+1):0];
  173.         [cellule setFloatValue:0.0];
  174.         [[cellule target] takeFloatValueFrom:cellule];
  175.         }
  176.     [self appDidInit:self];
  177.     [graphe efface:self];
  178.     [posPanel orderFront:self];    
  179.     [paramPanel orderFront:self];
  180.     [fenetre makeKeyAndOrderFront:self];
  181.     return self;
  182. }
  183.  
  184. - showInfo:sender
  185. {
  186.  
  187. if (infoView == nil)
  188.     {
  189.     if ([NXApp loadNibSection: "info.nib" owner: self] == nil)
  190.         {
  191.         return nil;
  192.         }
  193.     }
  194. [[infoView window] makeKeyAndOrderFront: nil];
  195. [infoView animateInfo:self];
  196. return self;
  197.  
  198. }
  199.  
  200. - (BOOL)appAcceptsAnotherFile:sender
  201. {
  202. return YES;
  203. }
  204.  
  205. //
  206. // Message reçu par le delegate de l’application pour qu’il ouvre le fichier de nom filename
  207. // et de type aType
  208. //
  209. - (int)app:sender openFile:(const char *)filename type:(const char *)aType
  210. {
  211. char titre[100];
  212.  
  213. strcpy(nomdefichier , filename);
  214. strcpy(titre,"Of Mice And Men :");
  215. strcat(titre,strrchr(filename,'/')+1); // Recherche le nom du fichier dans le path et l’ajoute au titre
  216. [fenetre setTitle:titre];
  217. if ([self charger:self])
  218.     initialise = YES;
  219. return 1;
  220. }
  221.  
  222. //
  223. // Message reçu par le delegate de l’application au démarrage de celle-ci
  224. //
  225. - appDidInit:sender;
  226. {
  227. if (!initialise)
  228.     {
  229.     [couleurFond setColor:NX_COLORBLACK];
  230.     [couleur1 setColor:NX_COLORCLEAR];
  231.     [couleur2 setColor:NX_COLORWHITE];
  232.     }
  233. [fenetre setMiniwindowIcon:"image2"];
  234. return self;
  235. }
  236. @end
  237.